package com.StudentSystem;
/*
用输出语句完成主界面的编写
用Scanner实现键盘录入数据
用Switch语句完成操作选择
用循环完成再次回到主界面
*/

import java.util.ArrayList;
import java.util.Scanner;

public class StudentMain {
    public static void main(String[] args) {

        //在主方法里创建集合(方便所有功能都用于同一个集合)
        ArrayList<Student> array = new ArrayList<Student>();

        while (true) {
            //用输出语句完成主界面的编写
            System.out.println("--------欢迎来到学生管理系统--------");
            System.out.println("1.添加学生");
            System.out.println("2.删除学生");
            System.out.println("3.修改学生");
            System.out.println("4.查看所有学生");
            System.out.println("5.推出系统");
            System.out.println("请输入你选择对应的数字");

            //用Scanner实现键盘录入数据
            Scanner sc = new Scanner(System.in);
            String line = sc.nextLine();

            //用Switch语句完成操作选择
            switch (line) {
                case "1":
                    //System.out.println("添加学生");

                    //调用添加学生信息的方法
                    addStudent(array);

                    break;

                case "2":
                    //System.out.println("删除学生");

                    //调用删除学生的方法
                    removeStudent(array);

                    break;

                case "3":
                    //System.out.println("修改学生");

                    setStudent(array);

                    break;
                case "4":
                    //System.out.println("查看所有学生");

                    //调用查看集合的方法
                    getStudent(array);

                    break;

                case "5":
                    System.out.println("谢谢使用");
                    return;
            }
        }


    }

    /*
    定义一个方法，用于添加学生信息
    键盘录入学生对象所需要的数据，显示提示信息
    创建学生对象，把键盘录入的数据赋值给学生对象的成员变量
    将学生对象添加到集合中
    给出添加成功提示
    */

    //定义一个方法addStudent()，用于创建学生对象；添加学生属性；放入集合。
    public static void addStudent(ArrayList<Student> array) {
        Scanner sc = new Scanner(System.in);

        //键盘录入学生对象所需要的数据，显示提示信息
        String sid;
        lo:while(true) {
            System.out.println("请输入学生学号");
            sid = sc.nextLine();

            for (int i = 0; i < array.size(); i++) {
                Student temp = array.get(i);
                    if(temp.getSid().equals(sid)){
                        System.out.println("该学号已被占有，请重新输入新学号");
                        sid = sc.nextLine();
                        i--;
                    }else{
                        break;
                    }
            }
            break lo;
        }

        System.out.println("请输入学生姓名");
        String name = sc.nextLine();

        System.out.println("请输入学生年龄");
        String age = sc.nextLine();

        System.out.println("请输入学生联系地址");
        String address = sc.nextLine();

        //创建学生对象，把键盘录入的数据赋值给学生对象的成员变量
        Student s = new Student(sid,name,age,address);

        //将学生对象添加到集合中
        array.add(s);

        //给出添加成功提示
        System.out.println("添加成功");
    }


    /*
    定义一个方法，用于删除学生信息
    键盘录入删除学生对象所需要的数据，显示提示信息
    遍历集合将对应学生从集合中删除
    给出删除成功提示
    */
    /*
    //定义一个方法，用于删除学生信息
    public static void removeStudent(ArrayList<Student> array) {

        //键盘录入删除学生对象所需要的数据(学号)，显示提示信息
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入你想删除的学生的学号");
        String sid = sc.nextLine();

        //遍历集合将对应学生从集合中删除
        for (int i = 0; i < array.size(); i++) {
            Student s = array.get(i);

            //在遍历的过程中加入判断，每遍历一个值都判断输入的字符串是否等于集合中的学号
            if (s.getSid().equals(sid)) {
                //s.getSid()是指对象s调用getSid()方法，equals(sid)是对比键盘录入信息时赋值的sid。
                array.remove(s);
                break;
            } else {
                System.out.println("请输入正确的学生学号");
            }
        }
        //给出删除成功提示
        System.out.println("删除成功");
    }
    */
    //重新写删除方法，在键盘录入后，判断是否匹配到集合中对应的值，如果没有提示重新录入，有就执行
    public static void removeStudent(ArrayList<Student> array) {

        Scanner sc = new Scanner(System.in);
        System.out.println("请输入你要删除的学生的学号");
        String sid = sc.nextLine();

        for (int i = 0; i < array.size(); i++) {
            Student s = array.get(i);

            if (s.getSid().equals(sid)) {
                array.remove(i);
                System.out.println("删除成功");
                break;
            }else{
                System.out.println("信息不存在，请重新输入");
            }
        }

    }

    /*
    定义一个方法，用于查看集合中所有学生的信息
    判断集合中是否有数据，如果有显示信息，如果没有就显示提示
    显示表头信息
    显示集合中现有的学生信息（遍历集合）
    调用方法
     */

    //定义一个方法，用于查看集合中所有学生的信息
    public static void getStudent(ArrayList<Student> array) {

        //判断集合中是否有数据，如果有显示信息，如果没有就显示提示
        if (array.size() == 0) {
            System.out.println("系统中还没录入学生信息，请先添加学生信息");
        } else {

            //显示表头信息
            System.out.println("学号\t\t\t姓名\t\t年龄（岁）\t联系地址");//\t等同于tab键

            //显示集合中现有的学生信息（遍历集合）
            for (int i = 0; i < array.size(); i++) {
                Student all = array.get(i);
                System.out.println(all.getSid() + "\t" + all.getName() + "\t" + all.getAge() + "\t" + "\t" + "\t" + all.getAddress());
            }
        }
    }


    /*
    定义一个方法，用于修改集合中学生的信息
    显示提示（学号），键盘录入学生信息（学号）
    显示提示（重新输入学生信息），键盘录入学生信息
    把学生所有的信息重新封装（创建新的对象）
    把新的对象替换旧的（在遍历中修改替换）
    显示提示成功
     */
    /*
    //定义一个方法，用于修改集合中学生的信息
    public static void setStudent(ArrayList<Student> array) {

        //显示提示（学号），键盘录入学生信息（学号）
        System.out.println("请输入您要修改的学生的学号");
        Scanner sc = new Scanner(System.in);
        String num = sc.nextLine();

        //显示提示（重新输入学生信息），键盘录入学生信息
        System.out.println("请输出学生的学号");
        String sid = sc.nextLine();
        System.out.println("请输出学生的姓名");
        String name = sc.nextLine();
        System.out.println("请输出学生的年龄");
        String age = sc.nextLine();
        System.out.println("请输出学生的联系地址");
        String address = sc.nextLine();

        //把学生所有的信息重新封装（创建新的对象）

        //Student s = new Student("sid","name","age","address");
        //不能用这个带参数的床对象方法！
        //因为带参的对象，会使前面键盘录入的信息失去意义，直接就把”“里面的字符串当作数据值建成对象的实际参数。
        //所以要用无参的创建对象方法。

        Student s = new Student();
        s.setSid(sid);
        s.setName(name);
        s.setAge(age);
        s.setAddress(address);

        //把录入的信息替换对应学生的信息（在遍历中替换/修改）
        for (int i = 0; i < array.size(); i++) {

            Student x = array.get(i);//得到每个集合的值的地址，并赋值给变量x。

            if (x.getSid().equals(num)) {
                array.set(i, s);
                break;
            }
        }
        System.out.println("修改成功");
    }
    */

    //重新写修改方法，在键盘录入后，判断是否匹配到集合中对应的值，如果没有提示重新录入，有就执行
    public static void setStudent(ArrayList<Student> array) {

        Scanner sc = new Scanner(System.in);
        System.out.println("请输入你要修改的学生的学号");
        String num = sc.nextLine();

        int index = -1;

        for (int i = 0; i < array.size(); i++) {
            Student s = array.get(i);

            if (s.getSid().equals(num)) {
                index = i;
                break;
            }
        }

        if (index == -1) {
            System.out.println("该信息不存在，请重新输入");
        } else {

            System.out.println("请输出学生的学号");
            String sid = sc.nextLine();
            System.out.println("请输出学生的姓名");
            String name = sc.nextLine();
            System.out.println("请输出学生的年龄");
            String age = sc.nextLine();
            System.out.println("请输出学生的联系地址");
            String address = sc.nextLine();

            Student s = new Student();
            s.setSid(sid);
            s.setName(name);
            s.setAge(age);
            s.setAddress(address);

            for (int i = 0; i < array.size(); i++) {
                Student s1 = array.get(i);

                if (s1.getSid().equals(num)) {
                    array.set(i,s);
                    break;
                }
            }
            System.out.println("修改成功");
        }
    }
}
